Importar Librerías
import pandas as pd
from pandas_profiling import ProfileReport
from quickda.clean_data import *
ALTA_VERAPAZ = pd.read_csv(r'data/ALTA_VERAPAZ.csv', keep_default_na=True)
BAJA_VERAPAZ = pd.read_csv(r'data/BAJA_VERAPAZ.csv', keep_default_na=True)
CHIMALTENANGO = pd.read_csv(r'data/CHIMALTENANGO.csv', keep_default_na=True)
CHIQUIMULA = pd.read_csv(r'data/CHIQUIMULA.csv', keep_default_na=True)
CUIDAD_CAPITAL = pd.read_csv(r'data/CUIDAD_CAPITAL.csv', keep_default_na=True)
EL_PROGRESO = pd.read_csv(r'data/EL_PROGRESO.csv', keep_default_na=True)
ESCUINTLA = pd.read_csv(r'data/ESCUINTLA.csv', keep_default_na=True)
GUATEMALA_BASICO = pd.read_csv(r'data/GUATEMALA_BASICO.csv', keep_default_na=True)
GUATEMALA_DIVERSIFICADO = pd.read_csv(r'data/GUATEMALA_DIVERSIFICADO.csv', keep_default_na=True)
GUATEMALA_PARVULOS = pd.read_csv(r'data/GUATEMALA_PARVULOS.csv', keep_default_na=True)
GUATEMALA_PREPRIMARIA_BILINGUE = pd.read_csv(r'data/GUATEMALA_PREPRIMARIA_BILINGUE.csv', keep_default_na=True)
GUATEMALA_PRIMARIA = pd.read_csv(r'data/GUATEMALA_PRIMARIA.csv', keep_default_na=True)
GUATEMALA_PRIMARIA_ADULTOS = pd.read_csv(r'data/GUATEMALA_PRIMARIA_ADULTOS.csv', keep_default_na=True)
HUEHUETENANGO = pd.read_csv(r'data/HUEHUETENANGO.csv', keep_default_na=True)
IZABAL = pd.read_csv(r'data/IZABAL.csv', keep_default_na=True)
JALAPA = pd.read_csv(r'data/JALAPA.csv', keep_default_na=True)
JUTIAPA = pd.read_csv(r'data/JUTIAPA.csv', keep_default_na=True)
PETEN = pd.read_csv(r'data/PETEN.csv', keep_default_na=True)
QUETZALTENANGO = pd.read_csv(r'data/QUETZALTENANGO.csv', keep_default_na=True)
QUICHE = pd.read_csv(r'data/QUICHE.csv', keep_default_na=True)
RETALHULEU = pd.read_csv(r'data/RETALHULEU.csv', keep_default_na=True)
SACATEPEQUEZ = pd.read_csv(r'data/SACATEPEQUEZ.csv', keep_default_na=True)
SAN_MARCOS = pd.read_csv(r'data/SAN_MARCOS.csv', keep_default_na=True)
SANTA_ROSA = pd.read_csv(r'data/SANTA_ROSA.csv', keep_default_na=True)
SOLOLA = pd.read_csv(r'data/SOLOLA.csv', keep_default_na=True)
SUCHITEPEQUEZ = pd.read_csv(r'data/SUCHITEPEQUEZ.csv', keep_default_na=True)
TOTONICAPAN = pd.read_csv(r'data/TOTONICAPAN.csv', keep_default_na=True)
ZACAPA = pd.read_csv(r'data/ZACAPA.csv', keep_default_na=True)
dataFrame = pd.concat([ALTA_VERAPAZ, BAJA_VERAPAZ, CHIMALTENANGO, CHIQUIMULA,
CUIDAD_CAPITAL, EL_PROGRESO, ESCUINTLA, GUATEMALA_BASICO,
GUATEMALA_DIVERSIFICADO, GUATEMALA_PARVULOS,
GUATEMALA_PREPRIMARIA_BILINGUE, GUATEMALA_PRIMARIA,
GUATEMALA_PRIMARIA_ADULTOS, HUEHUETENANGO, IZABAL, JALAPA,
JUTIAPA, PETEN, QUETZALTENANGO, QUICHE, RETALHULEU, SACATEPEQUEZ,
SAN_MARCOS, SANTA_ROSA, SOLOLA, SUCHITEPEQUEZ, TOTONICAPAN, ZACAPA])
dataFrame
| CODIGO | DISTRITO | DEPARTAMENTO | MUNICIPIO | ESTABLECIMIENTO | DIRECCION | TELEFONO | SUPERVISOR | DIRECTOR | NIVEL | SECTOR | AREA | STATUS | MODALIDAD | JORNADA | PLAN | DEPARTAMENTAL | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 16-01-0001-41 | 16-002 | ALTA VERAPAZ | COBAN | COPB ANEXO A EORM | ALDEA SAN PEDRITO | NaN | MOISES ADRIAN LOPEZ PEREZ | NaN | PREPRIMARIA BILINGUE | OFICIAL | RURAL | CERRADA TEMPORALMENTE | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| 1 | 16-01-0002-41 | 16-004 | ALTA VERAPAZ | COBAN | COPB ANEXO A EORM | ALDEA SAN JOSE ICBOLAY | NaN | JUAN ANTONIO FIGUEROA CAAL | NaN | PREPRIMARIA BILINGUE | OFICIAL | RURAL | ABIERTA | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| 2 | 16-01-0003-41 | 16-004 | ALTA VERAPAZ | COBAN | COPB ANEXO A EORM | ALDEA SANTA LUCIA | NaN | JUAN ANTONIO FIGUEROA CAAL | NaN | PREPRIMARIA BILINGUE | OFICIAL | RURAL | ABIERTA | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| 3 | 16-01-0004-41 | NaN | ALTA VERAPAZ | COBAN | CPPB ANEXA A EPRM | ALDEA LAS TORTUGAS | NaN | NaN | NaN | PREPRIMARIA BILINGUE | PRIVADO | RURAL | CERRADA TEMPORALMENTE | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| 4 | 16-01-0005-41 | 16-002 | ALTA VERAPAZ | COBAN | COPB ANEXO A EORM | ALDEA SAN PABLO XUCANEB | 45187639 | MOISES ADRIAN LOPEZ PEREZ | NaN | PREPRIMARIA BILINGUE | OFICIAL | RURAL | ABIERTA | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 1177 | 19-11-0025-43 | 19-020 | ZACAPA | SAN JORGE | COLEGIO BILINGÜE MONTESSORI, SAN JORGE | BARRIO EL CENTRO , SAN JORGE | 79436190 | ALBA LUZ MENDEZ | WENDY PAOLA SINTÚ ORELLANA | PRIMARIA | PRIVADO | URBANA | ABIERTA | MONOLINGUE | MATUTINA | DIARIO(REGULAR) | ZACAPA |
| 1178 | 19-11-0026-42 | 19-020 | ZACAPA | SAN JORGE | EODP ANEXA A EORM | ALDEA CIMARRÓN | 50099348 | ALBA LUZ MENDEZ | MANUEL DE JESÚS GONZÁLEZ GONZÁLEZ | PARVULOS | OFICIAL | RURAL | ABIERTA | MONOLINGUE | MATUTINA | DIARIO(REGULAR) | ZACAPA |
| 1179 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 1180 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 1181 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
65079 rows × 17 columns
Data Frame antes de la limpieza:
dataFrame.head()
| CODIGO | DISTRITO | DEPARTAMENTO | MUNICIPIO | ESTABLECIMIENTO | DIRECCION | TELEFONO | SUPERVISOR | DIRECTOR | NIVEL | SECTOR | AREA | STATUS | MODALIDAD | JORNADA | PLAN | DEPARTAMENTAL | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 16-01-0001-41 | 16-002 | ALTA VERAPAZ | COBAN | COPB ANEXO A EORM | ALDEA SAN PEDRITO | NaN | MOISES ADRIAN LOPEZ PEREZ | NaN | PREPRIMARIA BILINGUE | OFICIAL | RURAL | CERRADA TEMPORALMENTE | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| 1 | 16-01-0002-41 | 16-004 | ALTA VERAPAZ | COBAN | COPB ANEXO A EORM | ALDEA SAN JOSE ICBOLAY | NaN | JUAN ANTONIO FIGUEROA CAAL | NaN | PREPRIMARIA BILINGUE | OFICIAL | RURAL | ABIERTA | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| 2 | 16-01-0003-41 | 16-004 | ALTA VERAPAZ | COBAN | COPB ANEXO A EORM | ALDEA SANTA LUCIA | NaN | JUAN ANTONIO FIGUEROA CAAL | NaN | PREPRIMARIA BILINGUE | OFICIAL | RURAL | ABIERTA | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| 3 | 16-01-0004-41 | NaN | ALTA VERAPAZ | COBAN | CPPB ANEXA A EPRM | ALDEA LAS TORTUGAS | NaN | NaN | NaN | PREPRIMARIA BILINGUE | PRIVADO | RURAL | CERRADA TEMPORALMENTE | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| 4 | 16-01-0005-41 | 16-002 | ALTA VERAPAZ | COBAN | COPB ANEXO A EORM | ALDEA SAN PABLO XUCANEB | 45187639 | MOISES ADRIAN LOPEZ PEREZ | NaN | PREPRIMARIA BILINGUE | OFICIAL | RURAL | ABIERTA | BILINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
Información de las columnas:
dataFrame.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 65079 entries, 0 to 1181 Data columns (total 17 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 CODIGO 64995 non-null object 1 DISTRITO 61094 non-null object 2 DEPARTAMENTO 64995 non-null object 3 MUNICIPIO 64995 non-null object 4 ESTABLECIMIENTO 64988 non-null object 5 DIRECCION 64541 non-null object 6 TELEFONO 47617 non-null object 7 SUPERVISOR 61092 non-null object 8 DIRECTOR 37535 non-null object 9 NIVEL 64995 non-null object 10 SECTOR 64995 non-null object 11 AREA 64995 non-null object 12 STATUS 64995 non-null object 13 MODALIDAD 64995 non-null object 14 JORNADA 64995 non-null object 15 PLAN 64995 non-null object 16 DEPARTAMENTAL 64995 non-null object dtypes: object(17) memory usage: 8.9+ MB
Cantidad de datos faltantes por columna:
dataFrame.isna().sum()
CODIGO 84 DISTRITO 3985 DEPARTAMENTO 84 MUNICIPIO 84 ESTABLECIMIENTO 91 DIRECCION 538 TELEFONO 17462 SUPERVISOR 3987 DIRECTOR 27544 NIVEL 84 SECTOR 84 AREA 84 STATUS 84 MODALIDAD 84 JORNADA 84 PLAN 84 DEPARTAMENTAL 84 dtype: int64
dataFrame.describe()
| CODIGO | DISTRITO | DEPARTAMENTO | MUNICIPIO | ESTABLECIMIENTO | DIRECCION | TELEFONO | SUPERVISOR | DIRECTOR | NIVEL | SECTOR | AREA | STATUS | MODALIDAD | JORNADA | PLAN | DEPARTAMENTAL | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 64995 | 61094 | 64995 | 64995 | 64988 | 64541 | 47617 | 61092 | 37535 | 64995 | 64995 | 64995 | 64995 | 64995 | 64995 | 64995 | 64995 |
| unique | 64995 | 904 | 23 | 356 | 17478 | 33420 | 28006 | 827 | 19149 | 6 | 4 | 3 | 5 | 2 | 5 | 9 | 26 |
| top | 16-01-0001-41 | 01-403 | GUATEMALA | MIXCO | EORM | CABECERA MUNICIPAL | 79480009 | CARLOS HUMBERTO GONZALEZ DE LEON | --- | PRIMARIA | OFICIAL | RURAL | ABIERTA | MONOLINGUE | MATUTINA | DIARIO(REGULAR) | ALTA VERAPAZ |
| freq | 1 | 424 | 7206 | 1877 | 14573 | 599 | 441 | 569 | 4294 | 23586 | 39459 | 40710 | 52144 | 50174 | 47050 | 59382 | 5892 |
profile = ProfileReport(dataFrame)
profile
# Estandarizar todos los titulos de las columnas en minusculas
clean_df = clean(dataFrame, method='standardize')
# Eliminar columnas teléfono y director
# Eliminar datos de columnas restantes con datos faltantes
clean_df = clean_df.drop(['telefono', 'director'], axis=1)
clean_df = clean(clean_df, method='dropmissing', columns=['distrito', 'direccion', 'supervisor'])
clean_df.isna().sum()
codigo 0 distrito 0 departamento 0 municipio 0 establecimiento 0 direccion 0 supervisor 0 nivel 0 sector 0 area 0 status 0 modalidad 0 jornada 0 plan 0 departamental 0 dtype: int64
Ahora ya no hay datos faltantes en ninguna columna
# Reemplazar todas las entradas que tengan como valor ‘CIUDAD CAPITAL’ por el valor ‘GUATEMALA’
clean_df['departamento'] = clean_df['departamento'].str.replace('CIUDAD CAPITAL','GUATEMALA')
# Reemplazar todas las entradas que contengan el valor ‘ZONA’ por el valor ‘GUATEMALA’
clean_df.loc[clean_df['municipio'].str.contains('ZONA'), 'municipio'] = 'GUATEMALA'
# Cambiar el nombre de la variable ‘area’ a ‘urbana’ y
# reemplazar los valores actuales y asignar 0 para ‘RURAL’ y 1 para ‘URBANA’
clean_df['urbana'] = clean_df['area'].str.replace('RURAL','0').str.replace('URBANA','1')
clean_df = clean_df.drop(['area'], axis=1)
# Cambiar el nombre de la variable de ‘modalidad’ a ‘monolingue’ y
# reemplazar los valores actuales y asignar 0 para ‘bilingüe’ y 1 para ‘monolingüe’
clean_df['monolingue'] = clean_df['modalidad'].str.replace('BILINGUE','0').str.replace('MONOLINGUE','1')
clean_df = clean_df.drop(['modalidad'], axis=1)
# Se convierten las variables categoricas
for col in ['departamento', 'municipio', 'nivel', 'sector', 'urbana', 'status','monolingue','jornada','plan','departamental']:
clean_df[col] = clean_df[col].astype('category')
clean_df.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 60874 entries, 0 to 1178 Data columns (total 15 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 codigo 60874 non-null object 1 distrito 60874 non-null object 2 departamento 60874 non-null category 3 municipio 60874 non-null category 4 establecimiento 60874 non-null object 5 direccion 60874 non-null object 6 supervisor 60874 non-null object 7 nivel 60874 non-null category 8 sector 60874 non-null category 9 status 60874 non-null category 10 jornada 60874 non-null category 11 plan 60874 non-null category 12 departamental 60874 non-null category 13 urbana 60874 non-null category 14 monolingue 60874 non-null category dtypes: category(10), object(5) memory usage: 3.4+ MB
profile = ProfileReport(clean_df)
profile